package com.woniu.day8.controller;

import cn.dev33.satoken.annotation.SaCheckLogin;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.woniu.day8.pojo.Menu;
import com.woniu.day8.service.MenuService;
import com.woniu.day8.util.ResultMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/menu")
@CrossOrigin
@SaCheckLogin
public class MenuController {

    @Autowired
    private MenuService menuService;

    /**
     * 查询所有查询
     */
    @RequestMapping("/queryMenus")
    public ResultMessage queryMenus(){
        List<Menu> list = menuService.queryAllMenu();
        return ResultMessage.success(list);
    }

    /**
     * 新增菜单接口
     */
    @PostMapping("/addMenu")
    public ResultMessage addMenu(@RequestBody Menu menu){
        if(menu.getPid() == null){
            menu.setPid(0);
        }
        if(menu.getMname()==null||menu.getMname().isEmpty()){
            return ResultMessage.fail("菜单名称不能为空");
        }
        if(menu.getRoute()==null||menu.getRoute().isEmpty()){
            return ResultMessage.fail("菜单路由不能为空");
        }
        menuService.save(menu);
        return ResultMessage.success("添加成功");
    }

    /**
     * 修改菜单接口方法
     */
    @PutMapping("/updateMenuById")
    public ResultMessage updateMenuById(@RequestBody Menu menu){
        menuService.updateById(menu);
        return ResultMessage.success("修改成功");
    }

    /**
     * 删除菜单接口方法
     */
    @DeleteMapping ("/deleteById/{mid}")
    public ResultMessage deleteById(@PathVariable Integer mid){
        //查询指定菜单数据
        Menu menu = (Menu) queryById(mid).getData();
        if(menu == null){
            return ResultMessage.fail("没有此菜单,删除失败!");
        }else if(menu != null && menu.getPid() == 0){ //表示当前是一级菜单，则先删除其下的子级菜单在删除当前菜单
            //删除其下的子级菜单
            QueryWrapper<Menu> wrapper = new QueryWrapper<>();
            wrapper.eq("pid", menu.getMid());
            menuService.remove(wrapper);
            //再删除当前一级菜单
            menuService.removeById(menu.getMid());
        }else { //表示当前是一个二级菜单,直接删除
            menuService.removeById(mid);
        }
        return ResultMessage.success("删除成功");
    }
    /**
     * 根据mid查询指定菜单数据
     */
    @RequestMapping("/queryById")
    public ResultMessage queryById(@RequestParam Integer mid){
        Menu menu = menuService.getById(mid);
        return ResultMessage.success(menu);
    }
}